package com.itheima.d5_recursion;

import java.io.File;

/**
 * 目标：掌握文件搜索的实现。
 */
public class RecursionTest3 {
    public static void main(String[] args) {

        //查找
//        findFile(new File("xxx"), "HelloWorld.java"); //运行后报错：RuntimeException: 不是合法的文件！！！
        findFile(new File("day01oop-app1"), "HelloWorld.java"); //运行后报错：RuntimeException: 不是合法的文件！！！

        //删除
//        deleteFile(new File("day08map-stream-app/music"));

    }

    /**
     * 设计一个功能用来查找文件
     * @param dir 所在的文件夹
     * @param fileName 要查找的文件名
     */
    public static void findFile(File dir, String fileName) {
        //1.判断路径的合法性
        if (dir.isDirectory()) {
            //合法的目录
            //2、 遍历该文件夹中所有的子文件
            File[] files = dir.listFiles();
            //3、遍历文件夹中每一个文件对象，判断是否为为文件
            for (File file : files) {
                if (file.isFile()) {
                    //是一个文件，判断是否是要查找的文件
                    if (file.getName().equals(fileName)) {
                        //找到了
                        System.out.println("找到了！！" + file.getAbsolutePath());
                    }
                } else if (file.isDirectory()) {
                    //文件夹
                    //递归调用自身
                    findFile(file, fileName);
                }
            }
        } else {
            throw new RuntimeException("不是合法的文件夹！！");
        }
    }

    /**
     * 删除文件或者文件夹
     * @param file 要被删除的文件或者文件夹
     */
    public static void deleteFile(File file) {
        //1、判断数据的合法性
        if (file.exists()) {
            if (file.isFile()) {
                System.out.println("删除了文件：" + file.getPath());
                file.delete();
            } else {
                //先删除文件夹的子文件
                File[] children = file.listFiles();
                for (File child : children) {
                    //递归调用
                    deleteFile(child);
                }

                //然后再删除当前文件夹
                System.out.println("删除了文件夹：" + file.getPath());
                file.delete();
            }

        } else {
            throw new RuntimeException("删除的文件或者文件夹不存在！");
        }
    }
}









